import request from '../utils/request'; // 确保路径正确指向你的 request.js 文件

/**
 * 保存预约信息服务
 * @param {Object} params - 包含预约信息的对象
 * @returns {Promise}
 */
export const bookingSaveInfoService = async (params) => {
    let res = await request({
        url: '/bookings/saveBookingInfo', // 注意这里不需要包含基础URL
        method: 'POST',
        header: {
            'content-type': 'application/json' // 设置请求头为JSON格式
        },
        data: {
            ...params // 使用扩展运算符将params对象的所有属性展开并作为请求体的一部分发送
        }
    });
    return res;
};

export const bookingUpdateInfoService = async (params) => {
    let res = await request({
        url: '/bookings/updateBookingInfo', // 注意这里不需要包含基础URL
        method: 'POST',
        header: {
            'content-type': 'application/json' // 设置请求头为JSON格式
        },
        data: {
            ...params // 使用扩展运算符将params对象的所有属性展开并作为请求体的一部分发送
        }
    });
    return res;
};

export const bookinGetListService = async (params) => {
    let res = await request({
        url: '/bookings/getBookingList', // 注意这里不需要包含基础URL
        method: 'POST',
        header: {
            'content-type': 'application/json' // 设置请求头为JSON格式
        },
        data: {
            ...params // 使用扩展运算符将params对象的所有属性展开并作为请求体的一部分发送
        }
    });
    return res;
};

export const bookingDeleteInfoService = async (bookingId) => {
	// 将数据对象转换为URL-encoded格式
	let formData = `bookingId=${encodeURIComponent(bookingId)}`;

    let res = await request({
        url: '/bookings/deleteBookingInfo', // 注意这里不需要包含基础URL
        method: 'POST',
        header: {
            'content-type': 'application/x-www-form-urlencoded' // 表单格式
        },
        data: formData  // 直接使用转换后的字符串作为data
    });
    return res;
};

// web网页的导出
export const exportExcelWeb = async (params) => {
    const url = '/bookings/export';

    try {
        let res = await request({
            url: url,
            method: 'POST',
            header: {
                'content-type': 'application/x-www-form-urlencoded' // 表单格式
            },
            data: {
				...params
			}, 
            responseType: "arraybuffer" // 设置响应类型为二进制流
        });

        // 处理响应数据
        const urlBlob = window.URL.createObjectURL(new Blob([res.data]));
        const link = document.createElement('a');
        link.href = urlBlob;

        // 设置下载文件的文件名
        let timestamp = Date.parse(new Date()) / 1000;
        const fileName = '预约信息表_' + timestamp + ".xlsx";

        // 设置下载文件的文件名
        link.setAttribute('download', fileName);

        // 将创建的下载链接添加到页面并点击下载
        document.body.appendChild(link);
        link.click();

        // 清除创建的下载链接
        document.body.removeChild(link);
        URL.revokeObjectURL(urlBlob);
    } catch (error) {
        console.error('下载文件失败', error);
        alert("下载文件失败", error);
        // 处理错误
    }
}

// 导出Excel文件
export const exportExcel = async (params) => {
    const url = '/bookings/export';
    try {
        let res = await request({
            url: url,
            method: 'POST',
            header: {
                'content-type': 'application/x-www-form-urlencoded' // 表单格式
            },
            data: {
				...params
			},
            responseType: 'arraybuffer' // 设置响应类型为二进制流
        });

        if (res.statusCode === 200) {
            // 创建一个临时文件路径
            let timestamp = Date.parse(new Date()) / 1000;
            const filePath = `${wx.env.USER_DATA_PATH}/预约信息表.xlsx_${timestamp}`;

            // 将二进制数据写入文件
            const fs = wx.getFileSystemManager();
            fs.writeFile({
                filePath: filePath,
                data: res.data,
                encoding: 'binary',
                success: () => {
                    // 使用openDocument打开文件
                    uni.openDocument({
                        filePath: filePath,
                        fileType: 'xlsx',
                        success: function(res) {
                            console.log('打开文档成功');
                        },
                        fail: function(err) {
                            console.error('打开文档失败', err);
                        }
                    });
                },
                fail: (writeErr) => {
                    console.error('写入文件失败', writeErr);
                }
            });
        } else {
            console.error('请求失败', res.statusCode, res.data);
        }
    } catch (err) {
        console.error('请求失败', err);
    }
}